package tests;

import java.awt.Point;
import java.util.Iterator;
import aplicacion.modelo.ColleccionDeFantasmas;
import aplicacion.modelo.Fantasma;
import aplicacion.modelo.Shadow;
import junit.framework.Assert;
import junit.framework.TestCase;

public class ColleccionDeFantasmasTest extends TestCase {
	
	private final static int MAXIMO=4;
	
	public void testAgregar(){
		ColleccionDeFantasmas fantasmas=new ColleccionDeFantasmas();
		Fantasma fantasma=new Shadow(new Point(0,0),0);
		fantasmas.add(fantasma);
		Assert.assertEquals(fantasma, fantasmas.get(0));
		Assert.assertEquals(fantasmas.size(),1);
	}
	
	public void testGetDeCollecionVacia(){
		boolean estaBien=false;
		ColleccionDeFantasmas fantasmas=new ColleccionDeFantasmas();
		Assert.assertEquals(fantasmas.size(),0);
		try{
			fantasmas.get(0);
		}catch(Exception e){estaBien=true;}
		if(estaBien)
			Assert.assertTrue(true);
		else
			Assert.assertTrue(false);
	}
	
	public void testIteradorEstaVacia(){
		ColleccionDeFantasmas fantasmas=new ColleccionDeFantasmas();
		Iterator<Fantasma> iterador=fantasmas.iterator();
		Assert.assertTrue(!iterador.hasNext());		
	}
	
	public void testIteradorNoEstaVacia(){
		ColleccionDeFantasmas fantasmas=cargarFantasmas();
		Iterator<Fantasma> iterador=fantasmas.iterator();
		
		Assert.assertTrue(iterador.hasNext());		}
	
	public void testIteradorObtener(){
		ColleccionDeFantasmas fantasmas=cargarFantasmas();
		Iterator<Fantasma> iterador=fantasmas.iterator();
		
		for(int i=0;i<MAXIMO;i++){
			Assert.assertTrue(iterador.hasNext());	
			iterador.next();
		}
	}
	
	public void testIteradorObtenerUno(){
		ColleccionDeFantasmas fantasmas=new ColleccionDeFantasmas();
		Iterator<Fantasma> iterador=fantasmas.iterator();
		Fantasma fantasma=new Shadow(new Point(0,0),0);
		fantasmas.add(fantasma);
		Assert.assertEquals(fantasma, iterador.next());
	}
	
	public void testIterador(){
		int contador=0;
		ColleccionDeFantasmas fantasmas=cargarFantasmas();
		Iterator<Fantasma> iterador=fantasmas.iterator();
		while(iterador.hasNext()){
			contador++;
			iterador.next();	
		}
		Assert.assertTrue(fantasmas.size()==contador);
	}
	
	public void testIteradorr(){
		ColleccionDeFantasmas fantasmas=cargarFantasmas();

		Assert.assertTrue(MAXIMO==fantasmas.size());
		Iterator<Fantasma> iterador=fantasmas.iterator();
		for(int i=0;iterador.hasNext();i++){
			Assert.assertEquals((iterador.next()).getPosicion(), new Point(0,i));
		}
	}	
	
	private ColleccionDeFantasmas cargarFantasmas() {
		ColleccionDeFantasmas fantasmas=new ColleccionDeFantasmas();
		for(int i=0;i<MAXIMO;i++)
			fantasmas.add(new Shadow(new Point(0,i),0));
		
		return fantasmas;
	}
	
	
	
}
